home *** CD-ROM | disk | FTP | other *** search
- /*
- ### modified mid-point method ###
- */
-
- extern int kount;
- void mmid(y,dydx,nvar,xs,htot,nstep,yout,int_option)
- double y[],dydx[],xs,htot,yout[];
- int nvar, nstep,int_option;
- {
- int n,i;
- double x,swap,h2,h,*yt,*ym,*yn,*vfull,*dvector();
- extern int model,polar_coord,full_dim;
- extern double *param;
- extern int (*f_p)();
-
-
- yt=dvector(0,nvar-1);
- ym=dvector(0,nvar-1);
- yn=dvector(0,nvar-1);
- vfull=dvector(0,full_dim-1);
- h = htot/nstep;
- for(i=0;i<nvar;i++){
- ym[i] = y[i];
- yn[i] = y[i] + h * dydx[i];
- }
- x = xs + h;
- (int) f_p(yout,0,yn,param,x,nvar);
- if(int_option==1) {
- for (i=0;i<nvar;i++)
- yt[i] = 0.5 * (ym[i] + yn[i] + h * yout[i]);
- to_full_variables(vfull,yt,polar_coord);
- (void) draw_record_orbit(vfull,kount++,0);
- }
- h2 = 2.0 * h;
- for(n=1;n<nstep;n++){
- for(i=0;i<nvar;i++){
- swap = ym[i] + h2 * yout[i];
- ym[i] = yn[i];
- yn[i] = swap;
- }
- x += h;
- (int) f_p(yout,0,yn,param,x,nvar);
- if(int_option==1) {
- for (i=0;i<nvar;i++)
- yt[i] = 0.5 * (ym[i] + yn[i] + h * yout[i]);
- to_full_variables(vfull,yt,polar_coord);
- (void) draw_record_orbit(vfull,kount++,0);
- }
- }
- for (i=0;i<nvar;i++)
- yout[i] = 0.5 * (ym[i] + yn[i] + h * yout[i]);
- (void) free_dvector(vfull,0,full_dim-1);
- (void) free_dvector(yn,0,nvar-1);
- (void) free_dvector(ym,0,nvar-1);
- (void) free_dvector(yt,0,nvar-1);
- }
-